/**
 * @description cart 购物车 service 层次
 * @author 宫彦胜
 */

const { Cart } = require('../db/model')


/**
 * 创建购物车订单
 * @param {object} productId 商品订单id, name 商品名称, primaryPicUrl 商品图片, retailPrice 商品单价, userId 用户id
 */
async function createCart({ productId, name, primaryPicUrl, retailPrice, userId }){
  const res = await Cart.create(
    { productId, name, primaryPicUrl, retailPrice, userId }
  )
  return res
}

/**
 * 通过商品id 查询信息
 * @@param {number} 状态， 1 是在购物车 2是在订单 3是已经删除
 * @param {number} productId 商品id
 */
async function selectByProductId({state,productId,userId}){
  const whereOpt = { productId, userId, state }
  if(state){
    Object.assign(whereOpt,{ state })
  }
  const res = await Cart.findOne({
    where: whereOpt
  })
  // console.log(res)
  return res && res.dataValues
}

/**
 * 
 * @param {object} whereOpt state,productId,userId
 * @param {object} updateInfo  {count,newState}
 */
// 这里做成灵活的 ，可以修改状态
async function updateCart({state,productId,userId},{count,newState,isChecked}){
  const whereOpt = { state,productId,userId }
  const updateInfo = {}
  if(count){
    updateInfo.count = count
  }
  if(newState){
    updateInfo.state = newState
  }
  if(isChecked !== undefined){
    updateInfo.isChecked = isChecked
  }
  console.log(updateInfo)
  console.log(whereOpt)
  const res = await Cart.update(updateInfo,{
    where: whereOpt
  })
  // 代表修改成功
  return res[0]>0
}

/**
 * 查询购物车数据
 * @param {object}  state,productId,userId
 */
async function selectCart({state,productId,userId}){
  const whereOpt = {}
  if(state){
    whereOpt.state = state
  }
  if(productId){
    whereOpt.productId = productId
  }
  if(userId){
    whereOpt.userId = userId
  }
  let carts = await Cart.findAll({
    order: [
      ['updatedAt','desc']
    ],
    where: whereOpt
  })
  carts = carts.map(item=>item.dataValues)
  return carts
}

module.exports = {
  createCart,
  selectByProductId,
  updateCart,
  selectCart
}

